package eu.dominicum.ft.pd.mao;

import eu.dominicum.ft.pd.EStageResultType;
import eu.dominicum.ft.pd.Location;
import eu.dominicum.ft.pd.Stage;
import eu.dominicum.ft.pd.mao.validator.NewOrExistingCountry;
import eu.dominicum.ft.pd.mao.validator.NewOrExistingLocation;
import org.hibernate.validator.constraints.NotEmpty;

import javax.inject.Inject;
import javax.inject.Named;
import javax.validation.Valid;
import javax.validation.constraints.NotNull;
import java.util.List;

/**
 * Method Arguments Object for
 * {@link eu.dominicum.ft.pd.StageResult#make(MakeStageResultMAO)}.
 *
 * @author Harry Klerks
 * @since 2013M1
 */
@Named
@NewOrExistingLocation
@NewOrExistingCountry
public final class MakeStageResultMAO {

    /**
     * Result type.
     */
    @NotNull(message = "Type uitslag moet een waarde hebben")
    private EStageResultType resultType;

    /**
     * Location.
     */
    private Location location;

    /**
     * MakeLocationMAO.
     */
    @Inject
    @Valid
    private MakeLocationMAO makeLocationMAO;

    /**
     * getMakeStageResultDetailsMAOs.
     */
    @NotEmpty(message = "Een uitslag moet tenminste één uitslagdetail bevatten")
    @Valid
    private List<MakeStageResultDetailMAO> makeStageResultDetailsMAOs;

    /**
     * FantasyTourID.
     */
    private Long fantasyTourId;

    /**
     * Stage ID.
     */
    private Long stageId;

    /**
     * Stage.
     */
    private Stage stage;

    /**
     * Location ID.
     */
    private Long locationId;

    /**
     * .
     *
     * @return EStageResultType
     */
    public EStageResultType getResultType() {
        return resultType;
    }

    /**
     * .
     *
     * @param newResultType -
     */
    public void setResultType(final EStageResultType newResultType) {
        this.resultType = newResultType;
    }

    /**
     * .
     *
     * @return Location
     */
    public Location getLocation() {
        return location;
    }

    /**
     * .
     *
     * @param newLocation -
     */
    public void setLocation(final Location newLocation) {
        this.location = newLocation;
    }

    /**
     * .
     *
     * @return getMakeLocationMAO
     */
    public MakeLocationMAO getMakeLocationMAO() {
        return makeLocationMAO;
    }

    /**
     * .
     *
     * @param newMakeLocationMAO -
     */
    public void setMakeLocationMAO(final MakeLocationMAO newMakeLocationMAO) {
        this.makeLocationMAO = newMakeLocationMAO;
    }

    /**
     * .
     *
     * @return MakeStageResultDetailMAO[]
     */
    public List<MakeStageResultDetailMAO> getMakeStageResultDetailsMAOs() {
        return makeStageResultDetailsMAOs;
    }

    /**
     * .
     *
     * @param newMakeStageResultDetailsMAOs -
     */
    public void setMakeStageResultDetailsMAOs(
            final List<MakeStageResultDetailMAO> newMakeStageResultDetailsMAOs) {
        this.makeStageResultDetailsMAOs = newMakeStageResultDetailsMAOs;
    }

    /**
     * .
     *
     * @param newFantasyTourId -
     */
    public void setFantasyTourId(final Long newFantasyTourId) {
        this.fantasyTourId = newFantasyTourId;
    }

    /**
     * .
     *
     * @return Long
     */
    public Long getFantasyTourId() {
        return fantasyTourId;
    }

    /**
     * .
     *
     * @param newstageId -
     */
    public void setStageId(final Long newstageId) {
        this.stageId = newstageId;
    }

    /**
     * .
     *
     * @return Long
     */
    public Long getStageId() {
        return stageId;
    }

    /**
     * .
     *
     * @return Stage
     */
    public Stage getStage() {
        return stage;
    }

    /**
     * .
     *
     * @param newStage -
     */
    public void setStage(final Stage newStage) {
        this.stage = newStage;
    }

    /**
     * .
     *
     * @return Long
     */
    public Long getLocationId() {
        return locationId;
    }

    /**
     * .
     *
     * @param newLocationId -
     */
    public void setLocationId(final Long newLocationId) {
        this.locationId = newLocationId;
    }
}
